package com.example.blog.common;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

public class PasswordUtils {
    /**
     *      1. 加盐并生成密码
     * @param password  用户输入的密码
     * @return          最终的密码
     */
    public static String encrypt(String password) {
        // 产生一个盐值 (32位)
        String salt = UUID.randomUUID().toString().replace("-","");
        // 生成加盐之后的密码(MD5)
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        String finalPassword = salt + "@" + saltPassword;
        return finalPassword;
    }

    /**
     *    2. 生成加盐的密码 (方法一的重载)
     * @param password  用户输入的密码
     * @param salt      盐值
     * @return          最终的密码
     */
    public static String encrypt(String password,String salt) {
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        String finalPassword = salt + "@" + saltPassword;
        return finalPassword;
    }

    /**
     *       3.验证密码
     * @param password  用户输入的明文密码
     * @param finalPassword  数据库保存的最终密码
     * @return  结果
     */

    public static boolean check(String password,String finalPassword) {
        if (StringUtils.hasLength(password) && StringUtils.hasLength(finalPassword) && finalPassword.length() == 65) {
            // 现获取盐值
            String salt = finalPassword.split("@")[0];
            // 获取加盐之后的密码
            String confirmPassword = encrypt(password,salt);
            // 与最终密码进行比较
            if (confirmPassword.equals(finalPassword)) {
                return true;
            }else {
                return false;
            }
        }
        return false;
    }
}
